#函数进阶
#一、函数多返回值  也支持不同数据类型的数据的返回
#def 函数名（）：
#    return 返回值1,返回值2
#x,y=函数名（）

# def test():
#     return 1,'xiaofeng'
# x,y=test()
# print(x,y)

#二、函数多种传参形式
#1.位置参数
# def add(num1,num2):
#     return num1+num2
# add(1,2)
#2.关键字参数  可以不按照固定(定义)的形式进行传参  通过键=值
#还可以和位置参数进行混用，混用时，位置参数必须在前，且匹配擦参数顺序
# def info(name,age,gender):
#     print(f"名字是{name},年龄是{age},性别是{gender}")
# info(name='xiaofeng',gender='男'，age=12)
#3.不定长参数  位置，关键字
#1）位置不定长
#不定长定义的形式参数会作为元祖存在，接收不定长数量的参数传入
# def info(*args):
#     print(f"args的类型是{type(args)}，内容是{args}")
# info('xiaofeng',13,'男')
#2）关键字不定长 **  形成字典
# def info(**kwargs):
#    print(f"args的类型是{type(kwargs)}，内容是{kwargs}")
# info(name='xiaofeng',age=13,sex='男')
#4.缺省参数  必须从最后一个开始缺省
# def info(name,age,gender='男'):
#     print(f"名字是{name},年龄是{age},性别是{gender}")
# info('xiaofeng',13)

#5.函数做参数进行传递  计算逻辑的传递而非数据的传递
# def func(add):  数据确定，逻辑不确定
#     ret=add(1,2)
#     print(ret)
# def add(x, y):
#     return x + y
# def func(x,y):  数据不确定，逻辑确定
#     ret=add(1,2)
#     print(ret)
# def add(x, y):
#     return x + y
# func(1,2)


#三、匿名函数  只可以临时使用一次
#lambda 传入参数：函数体（一行代码）
def fun(add):
    ret=add(1,2)
    print(ret)
fun(lambda x,y:x*y)